package com.atguigu.gmall.product.feign;

import com.alibaba.fastjson.JSONObject;
import com.atguigu.gmall.common.result.Result;
import com.atguigu.gmall.model.product.*;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PutMapping;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 商品管理微服务远程feign接口
 */
@FeignClient(name = "service-product", path = "/admin/product")
public interface ProductFeignClient {
    /**
     * 通过三级分类id查询分类信息
     * @param category3Id
     * @return
     */
    @GetMapping("/getCategoryView/{category3Id}")
    public BaseCategoryView getCategoryView(@PathVariable("category3Id")Long category3Id);

    /**
     * 根据spuId，skuId 查询销售属性集合
     * @param skuId
     * @param spuId
     * @return
     */
    @GetMapping("/getSpuSaleAttrListCheckBySku/{skuId}/{spuId}")
    public List<SpuSaleAttr> getSpuSaleAttrListCheckBySku(@PathVariable("skuId") Long skuId, @PathVariable("spuId") Long spuId);
    /**
     * 根据spuId 查询map 集合属性
     * @param spuId
     * @return
     */
    @GetMapping("/getSkuValueIdsMap/{spuId}")
    public Map getSkuValueIdsMap(@PathVariable("spuId") Long spuId);

    /**
     * 获取sku最新价格
     * @param skuId
     * @return
     */
    @GetMapping("/getSkuPrice/{skuId}")
    public BigDecimal getSkuPrice(@PathVariable Long skuId);

    /**
     * 根据skuId获取sku信息
     * @param skuId
     * @return
     */
    @GetMapping("/getSkuInfo/{skuId}")
    public SkuInfo getSkuInfo(@PathVariable("skuId") Long skuId);
    /**
     * 获取全部分类信息
     * @return
     */
    @GetMapping("/getBaseCategoryList")
    public List<JSONObject> getBaseCategoryList();
    /**
     * 查询品牌信息详情
     * @param id
     * @return
     */
    @GetMapping(value = "/getById/{id}")
    public BaseTrademark getById(@PathVariable(value = "id") Long id);
    /**根据sku的id查询平台属性信息
     * @param skuId
     */
    @GetMapping(value = "/selectBaseAttrInfoBySku/{skuId}")
    public List<BaseAttrInfo> selectBaseAttrInfoBySku(@PathVariable(value = "skuId") Long skuId);

    /**
     * 修改sku库存
     * @param id
     * @param num
     * @return
     */
    @PutMapping("/updateSkuStock/{id}/{num}")
    public int updateSkuStock(@PathVariable(value = "id") Long id, @PathVariable(value = "num")Integer num);

    /**
     * 取消订单回滚库存
     * @param id
     * @param num
     * @return
     */
    @PutMapping("/updateCancelSkuStock/{id}/{num}")
    public void updateCancelSkuStock(@PathVariable(value = "id") Long id, @PathVariable(value = "num")Integer num);
}
